package com.project.springboot.config;

import com.google.common.util.concurrent.ThreadFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * description: 自定义线程池配置类
 * @author 朱正磊
 * @date 2025-06-04 15:18:08
 */
@Configuration
public class ThreadPoolConfig {

    /**
     * description: 创建线程池对象
     * @author 朱正磊
     * @date 2025-06-16 18:51:42
     * @return 返回线程池对象
     */
    @Bean
    public ThreadPoolExecutor threadPoolExecutor() {
        return new ThreadPoolExecutor(
                // 核心线程数
                5,
                // 最大线程数
                10,
                // 空闲存活时间（秒），设置为30秒
                30L, TimeUnit.SECONDS,
                // 工作队列容量
                new LinkedBlockingQueue<>(100),
                // 线程工厂，非守护线程，即用户线程，同时设置线程命名
                new ThreadFactoryBuilder().setNameFormat("async-business-%d").setDaemon(false).build(),
                // 任务拒绝策略，将任务返回给调用者线程执行，减缓新任务提交速度，避免系统过载
                new ThreadPoolExecutor.CallerRunsPolicy()
        );
    }

}
